package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.entity.VoyageBsaDO;
import com.cmc.cloud.cmclink.doc.vo.voyagebsavo.*;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * bsa （base space Allocation） 维护 Service 接口
 *
 * @author 招商轮船-管理员
 */
public interface VoyageBsaService {

    /**
     * 创建bsa （base space Allocation） 维护
     *
     * @param createReqVO 创建信息
     */
    void createVoyageBsa(@Valid VoyageBsaCreateReqVO createReqVO);

    /**
     * 更新bsa （base space Allocation） 维护
     *
     * @param updateReqVO 更新信息
     */
    void updateVoyageBsa(@Valid VoyageBsaUpdateReqVO updateReqVO);

    /**
     * 更新bsa 开关舱状态维护
     *
     * @param voyageBsaStatusReqVO 更新状态
     */
    void updateOpenStatus(@Valid VoyageBsaStatusReqVO voyageBsaStatusReqVO);

    /**
     * 删除bsa （base space Allocation） 维护
     *
     * @param id 编号
     */
    void deleteVoyageBsa(Long id);

    /**
     * 获得bsa （base space Allocation） 维护
     *
     * @param id 编号
     * @return bsa （base space Allocation） 维护
     */
    VoyageBsaDO getVoyageBsa(Long id);

    /**
     * 获得bsa （base space Allocation） 维护列表
     *
     * @param ids 编号
     * @return bsa （base space Allocation） 维护列表
     */
    List<VoyageBsaDO> getVoyageBsaList(Collection<Long> ids);

    /**
     * 获得bsa （base space Allocation） 维护分页
     *
     * @param pageReqVO 分页查询
     * @return bsa （base space Allocation） 维护分页
     */
    PageResult<VoyageBsaRespVO> getVoyageBsaPage(VoyageBsaPageReqVO pageReqVO);

    /**
     * 获得bsa （base space Allocation）
     *
     * @param bsaBaseQueryVo 下拉列表普通条件查询
     * @return bsa （base space Allocation）
     */
    List<VoyageBsaRespVO> queryVoyageBsa(VoyageBsaBaseQueryVo bsaBaseQueryVo);

    /**
     * 从历史数据复制 hg pod 信息
     *
     * @param historyVo
     */
    void copyFromHistory(VoyageBsaHistoryVO historyVo);

    /**
     * 从历史数据复制 cba 信息
     *
     * @param historyVo
     */
    void copyFromHistoryCba(VoyageBsaHistoryVO historyVo);

    /**
     * 导出数据列表
     *
     * @param voyageBsaExportReqVO
     * @return
     */
    List<VoyageBsaExportVO> getExportList(VoyageBsaExportReqVO voyageBsaExportReqVO);

    /**
     * 从模板创建数据
     *
     * @param templateReqVO
     */
    void createFromTemplate(VoyageTemplateReqVO templateReqVO);

    /**
     * 获取已存在的航线船期数据
     *
     * @param templateReqVO
     * @return
     */
    List<String> getExistVoyages(VoyageTemplateReqVO templateReqVO);

    /**
     * 判断目前bsa 是否已存在 分类舱位的配置信息 供前端判断是否覆盖原有配置
     *
     * @param voyageBsaBaseVO
     * @return Boolean
     */
    Boolean assertBsaCbaExist(VoyageBsaBaseVO voyageBsaBaseVO);

    /**
     * 依据正式数据 生成bsa 模板
     *
     * @param bsaId bsa 正式数据主键id
     */
    void collectBsaTemplate(Long bsaId);

    /**
     * 查询BSA
     *
     * @param vesselCode
     * @param voyage
     * @param portCode
     * @param exImType
     * @return BSA
     */
    VoyageBsaDO findVoyageBsa(String vesselCode, String voyage,String portCode, String exImType);
}
